いつの日か、あなたがSSHキーを吹っ飛ばしても落ち着いて対応できる道しるべ 〜SSMの手順を添えて〜
「あれ、GithubにPushできない。。。??」
「サーバにSSHで入れなくなった。。。」
こんにちは(U・ω・U)
AWS事業部の深澤です。
最近は認証方法が変わったり、コンテナ普及に伴ってちょっと前では常識だったSSHキーを使う機会も少なくなったなと思います。ですが、まだまだなくてはならないバリバリ現役の技術ですね。そんな大切なSSH秘密キー(以降、SSHキー)がある日吹っ飛んだらきっとあなたは焦ることでしょう。今回はSSHキーがある日なくなってしまっても全人類が落ち着いて行動できるようにと願いを込めてこのブログを書きます。
え、なんでこんなことを書こうと思ったかって?聞かないで下さい。ちょっと疲れてたんです…。
まずは落ち着きましょう。
いきなりポエムっぽいですが、お茶でも飲んで少し落ち着きましょう。慌ててもなくなったSSHキーは帰ってきません。障害対応と一緒でトラブル対応は落ち着くことから始まると個人的に考えています。
known_hostsを確認しよう
もしOpenSSHをしようしているなら、デフォルトで通信ホストが$HOME/.ssh/known_hosts または /etc/ssh/ssh_known_hostsに保存されているはずです。これを確認することでSSHキーがなくなったことによる影響範囲を確認します。
新しいSSHキーを作成してキーを入れ替えよう
Github等のGitリポジトリであれば、キーを入れ替えるだけで大丈夫です。新しいSSHキーを作成して入れ替え作業を進めましょう。新しいSSHキーを作成する場合には、これを機にSSHキーを見直しましょう。最近、OpenSSH8.3のリリースに伴って、ssh-rsaが非推奨になる傾向があります。
サーバには別の方法でアクセスする方法を考えよう
SSHでログインしていたサーバは、そもそも入れないのでキーの入れ替えができませんね。なのでSSH以外でのログイン方法が本当にないのか考えましょう。ローカルサーバを利用されているのであればディスプレイとキーボードを接続すれば入れますし、もしAWSのEC2を利用されているならSystems ManagerのSession Managerというサービスによってサーバに入ることが可能です。
こちらのSession Manager、非常に便利ですが注意点があるのと設定が複雑なので、こちらにまとめておきますね。
Session Managerを使う注意点
ネットワーク
Session Managerですが通信のため以下のエンドポイントにアクセスできる必要があります。
- com.amazonaws.リージョン.ssm
- com.amazonaws.リージョン.ec2messages
- com.amazonaws.リージョン.ssmmessages
InternetGatewayと関連付いているPublicSubnetにEC2が乗っている場合は問題ありません。完全に隔離されてしまったPrivateSubnetからだとアクセスできないので、NatGatewayかPrivateLinkを使用しましょう。
エージェント
Session Managerを使うにはインスタンスにエージェントがインストールされている必要があります。最近のAMIにはほとんどインストールされているはずですが、一部インストールされていないAMIもあります。詳しくは公式ドキュメントが参考になりますのでこちらをご参照下さい。
Session Managerを使う手順
まずはロールを作成しましょう。IAMのトップからロールの作成画面に遷移し、「ユースケースの選択」ではEC2を選び、「次のステップ」をクリックします。
続いてポリシー「AmazonEC2RoleforSSM」を選択し、「次のステップ」をクリックします。
タグは必要に応じてつけて下さい。ここでは設定せずに進みます。
ロール名とロールの説明もご自身で管理しやすい名前でつけて下さい。
続いてこのロールをEC2に割り当てます。インスタンスの一覧からIAMロールの割り当てまで進みましょう。
先ほど作成したロールを割り当てて次に進みます。
これで準備完了です!Systems Managerのトップ画面からSession Managerへと進みましょう。
セッションの開始をクリックします。
無事にセットアップできていればターゲットインスタンスに設定したインスタンスが出てくるはずです。
もし手順に問題ないはずなのにターゲットインスタンスに出てこないという場合には、今一度、本ブログの「Session Managerを使う注意点」を確認してみて下さい。
日頃から予防策を
SSHは素晴らしい技術ですし秘密キーと公開キーを用いたセキュリティは非常に優れていますが、それに依存しすぎないようにすることも大切です。先日にはOpenSSHの8.3のリリースに伴いscpコマンドが非推奨となりました。
AWSをご利用になられている場合には先ほどのSession Managerを使えばEC2インスタンスにSSHでログインする必要はなくなります。
また、SSHのキーはデフォルト名のままにしておかないというのも大切ですね。ssh-keygenコマンドでファイル名を指定しないと$HOME/.ssh/id_rsaが生成されますが、このキーを使ってしまうと上書きされてしまう恐れがあります。
最後に
いかがでしたでしょうか!本ブログがいつの日か誰かの助けになれば幸いです。自分のような悲劇に見舞われる人が1人でも減ることを祈っています…。
以上、深澤(@shun_quartet)でした!